长大后想做什么?做回小孩!

0%

LeetCode——整数反转

NO.7 整数反转 简单

QDB4wd.png

看到题目的第一个想法:先定义一个保存结果数的变量ans,将参数x不断地对10取余,每次取余将余数加上ans*10,当x=0的时候循环结束,取得最终反转后的数ans。

但是这个想法有个问题就是当“ans10+余数”这个操作时可能会溢出,但庆幸的是检查此操作是否会溢出并不是难事,如果”ans\10+余数“会溢出,那么一定有“ans>=IntMax/10”。

即:参数x为整数 1.“ans>IntMax/10”一定会溢出。2.“ans==IntMax/10”由于IntMax=2^31-1=2147483647,所以此时余数如果大于7也会溢出。 参数x为负数 1.“ans<IntMin/10”一定会溢出。2.“ans==IntMin/10”由于IntMin=-2^31=-2147483648 ,所以此时余数如果小于-8也会溢出。

1
2
3
4
5
6
7
8
9
10
11
public int reverse(int x) {
int ans=0;
while (x!=0){
int temp=x%10;
x/=10;
if (ans>Integer.MAX_VALUE/10||(ans==Integer.MAX_VALUE/10&&temp>7))return 0;
if (ans<Integer.MIN_VALUE/10||(ans==Integer.MIN_VALUE/10&&temp<-8))return 0;
ans=ans*10+temp;
}
return ans;
}

时间复杂度O(logn)


本人菜鸟,有错误请告知,感激不尽!

更多题解和学习记录博客:博客github